#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<pthread.h>
#include<semaphore.h>

sem_t semid1,semid2;

void * Thread_Fun1(void* arg){
    char c;
    sem_wait(&semid2);
    sem_wait(&semid1);
    for(c='a';c<='f';c++){
        fprintf(stdout,"%c",c);
        fflush(stdout);
        usleep(500);
    }
    sem_post(&semid1);
    sem_post(&semid2);
    printf("\n");
    return NULL;
}

void * Thread_Fun2(void* arg){
    char c;
    // sem_wait(&semid2);
    sem_wait(&semid1);
    for(c='A';c<='F';c++){
        fprintf(stdout,"%c",c);
        fflush(stdout);
        usleep(500);
    }
    sem_post(&semid1);
    sem_post(&semid2);
    printf("\n");
    return NULL;
}

int main(){
    pthread_t tid1,tid2;
    sem_init(&semid1,0,1);
    sem_init(&semid2,0,0);
    pthread_create(&tid1,NULL,Thread_Fun1,NULL);
    pthread_create(&tid2,NULL,Thread_Fun2,NULL);
    pthread_join(tid1,NULL);
    pthread_join(tid2,NULL);
    sem_destroy(&semid1);
    sem_destroy(&semid2);
    return 0;
}